package com.secsys.service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

import com.secsys.dto.StoFinanceprofitDTO;
import com.secsys.model.TbStoFinanceprofit;
import com.secsys.model.TbStoStock;

public interface StoFinanceProfitService extends Service<TbStoFinanceprofit, Integer> {
	/**
	 * 根据股票代码查找StoFinanceprofitDTO（利润构成与盈利能力）对象数组
	 * @param stockCode
	 * 			股票代码，TbStoStockDTO的stockCode
	 * @return
	 * 			List<StoFinanceprofitDTO>对象数组
	 */
	public List<StoFinanceprofitDTO> queryStoFinanceprofitByStockCode(String stockCode);
	
	/**
	 * 根据“基本信息对象”tbStoStock查找StoFinanceprofitDTO（利润构成与盈利能力）对象数组
	 * @param tbStoStock
	 * 			股票基本信息POJO对象，TbStoStockDTO对象
	 * @return
	 * 			List<StoFinanceprofitDTO>（利润构成与盈利能力）对象数组
	 */
	public List<StoFinanceprofitDTO> queryStoFinanceprofitByTbStoStock(TbStoStock tbStoStock);
	
	/**
	 * 根据股票代码 stockCode和日期date，查找某日某股的StoFinanceprofitDTO（利润构成与盈利能力）对象数组
	 * @param 	stockCode
	 * 			股票代码，TbStoStockDTO的stockCode
	 * @param	fieldDate
	 * 			待查询的某天时间，如：1999-11-24
	 * @return
	 * 			StoFinanceprofitDTO（利润构成与盈利能力）对象数组
	 */
	public List<StoFinanceprofitDTO> queryStoFinanceprofitByTbStoStockCodeAndDate(int stockCode,Date fieldDate);
	
	/**
	 * 根据“基本信息对象”tbStoStock和日期date，查找某日某股的StoFinanceprofitDTO（利润构成与盈利能力）对象数组
	 * @param tbStoStock
	 * 			股票基本信息POJO对象，TbStoStockDTO对象
	 * @param	fieldDate
	 * 			待查询的某天时间，如：1999-11-24
	 * @return
	 * 			StoFinanceprofitDTO（利润构成与盈利能力）对象数组
	 */
	public List<StoFinanceprofitDTO> queryStoFinanceprofitByTbStoStockAndDate(TbStoStock tbStoStock,Date fieldDate);
	
	/**
	 * 根据日期date，查找某日所有股票的StoFinanceprofitDTO（利润构成与盈利能力）对象数组
	 * @param	fieldDate
	 * 			待查询的某天时间，如：1999-11-24
	 * @return
	 * 			StoFinanceprofitDTO（利润构成与盈利能力）对象数组
	 */
	public List<StoFinanceprofitDTO> queryStoFinanceprofitByDate(Date fieldDate);
	
	/**
	 * 财务分析之“利润构成与盈利能力”
	 * @param newDate
	 * 				新的年限
	 * @param lastDate
	 * 				旧的年限
	 * @param num
	 * 				"利润构成与盈利能力"在年限范围之内，上升或下降的数目，比如：新的一年比旧年上升20%为：+1.2，下降了10%为-10%，则参数为2011-1-1,2010-1-1,1.2
	 * @return
	 */
	public HashMap<String, List> queryStoFinanceprofitBySearch(Date newDate,Date lastDate,double num);
	
	/**
	 * 			财务分析之，"净利润"NetGain按时间范围的搜索；
	 * 			按照给定的起始年月和结束日期，以及上升、下降百分比进行搜索,返回搜索总记录数目
	 * @param startDate开始时间
	 * @param endDate结束时间
	 * @param num上升、下降的百分比
	 * @param updown上升还是下降的类型，1为上升、0为下降
	 * @return
	 */
	public int countSearchWithNetGain(Date startDate,Date endDate,double num,int updown);
	
	/**
	 * 			财务分析之，"主营业务利润"MainProfit按时间范围的搜索；
	 * 			按照给定的起始年月和结束日期，以及上升、下降百分比进行搜索,返回搜索总记录数目
	 * @param startDate开始时间
	 * @param endDate结束时间
	 * @param num上升、下降的百分比
	 * @param updown上升还是下降的类型，1为上升、0为下降
	 * @return
	 */
	public int countSearchWithMainProfit(Date startDate,Date endDate,double num,int updown);
	
	/**
	 * 			财务分析之，"主营业务利润"MainProfit按时间范围的搜索；
	 * 			按照给定的起始年月和结束日期，以及上升、下降百分比进行搜索，返回搜索的记录集合HashMap<String, List>
	 * @param startDate开始时间
	 * @param endDate结束时间
	 * @param num上升、下降的百分比
	 * @param updown上升还是下降的类型，1为上升、0为下降
	 * @return
	 */
	public HashMap<String, List> querySearchWithMainProfit(Date startDate,Date endDate,double num,int updown,int offset,int count);
	
	/**
	 * 			财务分析之，"净利润"NetGain按时间范围的搜索；
	 * 			按照给定的起始年月和结束日期，以及上升、下降百分比进行搜索，返回搜索的记录集合HashMap<String, List>
	 * @param startDate开始时间
	 * @param endDate结束时间
	 * @param num上升、下降的百分比
	 * @param updown上升还是下降的类型，1为上升、0为下降
	 * @return
	 */
	public HashMap<String, List> querySearchWithNetGain(Date startDate,Date endDate,double num,int updown,int offset,int count);
	/**
	 * 得到最新的日期
	 * @return
	 */
	public Date findLastDate();
}
